package sun.superstring.innerclass4;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test3 {
    public static void main(String[] args) {
        // 目标：搞清楚几个匿名内部类的使用场景
        // 需求：创建一个登录窗口，窗口上只有一个登录按钮
        JFrame win = new JFrame("登录窗口");
        win.setSize(300, 200);  // 窗口大小
        win.setLocationRelativeTo(null);  // 居中显示
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 点击关闭按钮，程序退出

        JPanel panel = new JPanel();  // 添加一个桌布（面板），可以自适应大小
        win.add(panel);  // 添加到窗口中

        JButton btn = new JButton("登录");  // 登录按钮
//        win.add(btn);  // 添加到窗口中
        panel.add(btn);  // 添加到面板中

        // java要求必须给这个按钮添加一个点击事件的监听器对象，这样就可以监听用户的点击操作，就可以做出反应
        // 开发中不是我们要主动去写匿名内部类，而是用别人的功能的时候，别人可以让我们写一个匿名内部类吗，我们才会写

        // 方式一：实现接口
        ClickListener listener = new ClickListener();
        btn.addActionListener(listener);
        // 方式二：不直接实现点击事件的监听器接口，而是使用匿名内部类
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("登录成功！！！");
            }
        });
        // 方式三：匿名内部类代码简化
        btn.addActionListener(e -> System.out.println("登录成功！！！~~~~~"));
        // 调用过程中，优先用这个简化的代码，其次是匿名内部类，最后是直接实现接口

        win.setVisible(true);  // 显示窗口
    }
}


// 定义一个监听器实现类对象
class ClickListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("用户点击了登录按钮");
    }
}